import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:path_provider/path_provider.dart';

import 'platform_service_stub.dart';
import 'file_events.dart';
import 'file_watchers.dart';

// Re-export interface so conditional import consumers see PlatformService type
export 'platform_service_stub.dart';

/// IO 平台的 PlatformService 实现：
/// - 平台版本返回 `flutter_<platform>`；
/// - 日志根路径位于 `ApplicationSupport/pd_log`；
/// - 文件事件通过 Dart 侧 watcher/轮询与事件总线提供。
class IoPlatformService implements PlatformService {
  IoPlatformService();

  /// 获取平台版本字符串（用于调试/展示）。
  /// 返回类似 `flutter_iOS`、`flutter_macOS` 的标识。
  @override
  Future<String?> getPlatformVersion() async {
    return 'flutter_${defaultTargetPlatform.name}';
  }

  /// 返回日志根路径（Application Support 下的 `pd_log` 目录）。
  /// 若目录查询失败或平台不支持，返回 `null` 以便上层优雅降级。
  @override
  Future<String?> getLogRootPath() async {
    try {
      final dir = await getApplicationSupportDirectory();
      return '${dir.path}${Platform.pathSeparator}pd_log';
    } catch (_) {
      return null;
    }
  }

  /// 返回文件事件流（created/modified/deleted）。
  /// 内部确保监听器懒启动，避免无订阅时占用资源。
  /// 事件结构统一为 `{type, path, sizeBytes?, modifiedMs?, tsMs}`。
  @override
  Stream<Map<String, dynamic>> fileEvents() {
    FileWatchManager.instance.startIfNeeded();
    return FileEventBus.instance.stream;
  }
}

/// IO 平台服务实例工厂。
PlatformService getPlatformService() => IoPlatformService();
